/*
 * @(#) FontNameConverter.java
 *
 * Copyright 2002 - 2003 JIDE Software. All rights reserved.
 */
package com.element.converter.impl;

import com.element.converter.ConverterContext;
import com.element.converter.ObjectConverter;

import java.awt.*;

/**
 * Converter which converts Font Name String to String and converts it back. It's almost the same as StringConverter
 * except if user types in a string which cannot find in font list on your computer, it will return null in fromString
 * and return "" in toString.
 */
public class FontNameConverter extends ObjectConverter {
	private boolean _ensureFontExistence = false;
	/**
	 * ConverterContext for a font name.
	 */
	public static ConverterContext CONTEXT = new ConverterContext("FontName");


	public String toString(Object object, ConverterContext context) {
		if (object == null) {
			return "";
		} else {
			if (isEnsureFontExistence()) {
				String[] fontNames = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
				for (String fontName : fontNames) { // check font if it is available
					if (fontName.equals(object)) {
						return fontName;
					}
				}
				return "";
			} else if (object instanceof String) {
				return (String) object;
			} else {
				return "";
			}
		}
	}

	public Object fromString(String string, ConverterContext context) {
		if (string.length() == 0) {
			return null;
		} else {
			if (isEnsureFontExistence()) {
				String[] fontNames = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
				for (String fontName : fontNames) { // check font if it is available
					if (fontName.equals(string)) {
						return string;
					}
				}
				return null;
			} else {
				return string;
			}
		}
	}

	/**
	 * Checks if the FontNameConverter ensures the font exists on your OS. It is false by default. Setting it to true
	 * will slow down the performance as it takes time to check whether the font actually exists.
	 *
	 * @return true or false.
	 * @since 3.3.4
	 */
	public boolean isEnsureFontExistence() {
		return _ensureFontExistence;
	}

	/**
	 * Sets the flag so that FontNameConverter ensures the font exists on your OS.
	 *
	 * @param ensureFontExistence true or false.
	 * @since 3.3.4
	 */
	public void setEnsureFontExistence(boolean ensureFontExistence) {
		_ensureFontExistence = ensureFontExistence;
	}
}
